Spring 强制使用 cglib 的好处
提示
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(类似继承)。而JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
记得有个很经典的问题:如果不做特殊配置 spring 的 @transactional注解,放在类中非接口内的方法上时,是不起作用的。因为spring默认使用JDK的代理,被 Spring 代理的类只能拦截接口中的方法,不能拦截非接口中的方法。
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(类似继承)。而JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
记得有个很经典的问题:如果不做特殊配置 spring 的 @transactional注解,放在类中非接口内的方法上时,是不起作用的。因为spring默认使用JDK的代理,被 Spring 代理的类只能拦截接口中的方法,不能拦截非接口中的方法。